﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using nmConnectionDatabase;

namespace DarkPassenger
{
    public partial class MenuFacturacion_AgregarNuevoProducto : Form
    {
        int ColumnGrid;
        int RowGrid;
        ConexionDB Conexion;
        ListView lstProductos;

        public MenuFacturacion_AgregarNuevoProducto(ConexionDB Conexion, ref ListView lstProductos)
        {
            InitializeComponent();
            this.Conexion = Conexion;
            this.lstProductos = lstProductos;
            CargarGrid("");
            CargarAutoComplete();
            cmbTipoProducto.SelectedIndex = 0;
            cmbConsola.SelectedIndex = 0;
            cmbFabricante.SelectedIndex = 0;
        }

        private void CargarGrid(String ConsultaSQL)
        {
            string Consulta = @"Select Productos.TipoProducto + ProductosXConsola.IDConsola + Productos.IDProducto AS [ID Producto],
                                Productos.Nombre, Consolas.Nombre as Consola, Stock, Precio, Descripcion,
                                Productos.Fabricante, Genero, Clasificacion, Portada, FechaSalida, ProductosxConsola.Activo
                                FROM Productos INNER JOIN ProductosXConsola on Productos.TipoProducto = ProductosXConsola.TipoProducto AND 
                                Productos.IDProducto = ProductosXConsola.IDProducto INNER JOIN Consolas ON
                                ProductosXConsola.IDConsola = Consolas.IDConsola"; //Where  + ConsultaSQL;
            if (ConsultaSQL.Trim() != "") Consulta = Consulta + " WHERE " + ConsultaSQL;
            //Se carga el DataSet de la Conexion pasandole la Query y el NombreTabla
            Conexion.CargarDataSet(Consulta, "Productos");
            grdProductosxConsola.DataSource = Conexion.GetDataSet().Tables[0];
            Conexion.Close();
        }

        private void grdProductosxConsola_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                ContextMenuStrip cm = new ContextMenuStrip();
                cm.Items.Add("Agregar a la Compra");


                ColumnGrid = e.ColumnIndex;
                RowGrid = e.RowIndex;

                cm.ItemClicked += new ToolStripItemClickedEventHandler(cm_ItemClicked);


                //cm.MenuItems.Add("Abrir" );
                //cm.MenuItems.Add("Agregar");

                var Posicion_Puntero = grdProductosxConsola.PointToClient(Cursor.Position);

                cm.Show(grdProductosxConsola, Posicion_Puntero);
            }
        }

        private void cm_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            MenuFacturacion_AgregarNuevoProducto_AgregarCantidad form = new MenuFacturacion_AgregarNuevoProducto_AgregarCantidad();
            form.ShowDialog();
            string Cantidad = form.GetString;

            if (grdProductosxConsola.Rows[RowGrid].Cells["Activo"].Value.ToString() == "False")
            {
                MessageBox.Show("El Producto esta dado de Baja - No se puede vender");
            }

            else if (Cantidad.Trim() == "" || Convert.ToInt32(Cantidad) == 0)
                MessageBox.Show("Cantidad Invalida");


            else if (Convert.ToInt32(Cantidad) > Convert.ToInt32(grdProductosxConsola.Rows[RowGrid].Cells["Stock"].Value))
            {
                MessageBox.Show("No hay Stock Suficiente para realizar la venta");
            }

            else
            {
                string IDProductoConcatenado = grdProductosxConsola.Rows[RowGrid].Cells["ID Producto"].Value.ToString();
                bool error = false;

                    foreach (ListViewItem item in lstProductos.Items) 
                    {
                        if(item.SubItems[0].Text.ToString() == IDProductoConcatenado) 
                        {
                            error = true;
                        }
                    }

                    if (error == true)
                    {
                        MessageBox.Show("No se puede volver a agregar este Producto - Ya fue agregado a la venta");
                    }
                    else
                    {
                        var item = new ListViewItem(new[] { IDProductoConcatenado, grdProductosxConsola.Rows[RowGrid].Cells["Nombre"].Value.ToString(), grdProductosxConsola.Rows[RowGrid].Cells["Consola"].Value.ToString(), grdProductosxConsola.Rows[RowGrid].Cells["Precio"].Value.ToString(), Cantidad });
                        lstProductos.Items.Add(item);
                    }
            }
        }

        private string BusquedaUsuario()
        {

            string Consulta = "";

            if (txtIDProducto.Text.Trim() != "")
            {
                FiltrarConsultaUsuario(1, ref Consulta);
            }

            if (txtNombre.Text.Trim() != "")
            {
                FiltrarConsultaUsuario(2, ref Consulta);
            }

            if (txtDescripcion.Text.Trim() != "")
            {
                FiltrarConsultaUsuario(3, ref Consulta);
            }


            if (cmbTipoProducto.Text.Trim() != "" && (!(cmbTipoProducto.SelectedIndex == 0)))
            {
                FiltrarConsultaUsuario(4, ref Consulta);
            }

            if (cmbConsola.Text.Trim() != "" && (!(cmbConsola.SelectedIndex == 0)))
            {
               FiltrarConsultaUsuario(5, ref Consulta);
            }

            if (cmbFabricante.Text.Trim() != "" && (!(cmbFabricante.SelectedIndex == 0)))
            {
                FiltrarConsultaUsuario(6, ref Consulta);
            }     
            return Consulta;
        }

        private void FiltrarConsultaUsuario(int num, ref string Consulta)
        {
            if (!(Consulta.Trim() == "")) Consulta += " AND";
            switch (num)
            {
                case 1:
                    Consulta += @" Productos.TipoProducto + ProductosxConsola.IDConsola + 
                                   Productos.IDProducto LIKE '%" + txtIDProducto.Text + "%'";              
                    break;
                case 2:
                    
                    Consulta += " Productos.Nombre LIKE '%" + ArreglarText(ref txtNombre) + "%'";
                    break;
                case 3:
                    Consulta += " Productos.Descripcion LIKE '%" + ArreglarText(ref txtDescripcion) + "%'";
                    break;
                case 4:
                    if (cmbTipoProducto.SelectedIndex == 1) Consulta += " Productos.TipoProducto = 'A'";
                    if (cmbTipoProducto.SelectedIndex == 2) Consulta += " Productos.TipoProducto = 'C'";
                    if (cmbTipoProducto.SelectedIndex == 3) Consulta += " Productos.TipoProducto = 'J'";
                    break;
                case 5:
                    Consulta += " Consolas.Nombre LIKE '%" + cmbConsola.Text + "%'";  
                    break;
                case 6:
                    Consulta += " Productos.Fabricante LIKE '%" + cmbFabricante.Text + "%'";
                    break;
            }
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            string Consulta = "";
            Consulta = BusquedaUsuario();
            CargarGrid(Consulta);
        }

        private void btnReiniciar_Click(object sender, EventArgs e)
        {
            CargarGrid("");
        }

        public void CargarAutoComplete()
        {
            AutoCompleteStringCollection gridColIDProducto = new AutoCompleteStringCollection();
            AutoCompleteStringCollection gridColNombre = new AutoCompleteStringCollection();
            AutoCompleteStringCollection gridColDescripcion = new AutoCompleteStringCollection();
            AutoCompleteStringCollection gridColConsola = new AutoCompleteStringCollection();
            AutoCompleteStringCollection gridColFabricante = new AutoCompleteStringCollection();
            foreach (DataGridViewRow row in grdProductosxConsola.Rows)
            {
                gridColIDProducto.Add(row.Cells[0].Value.ToString());
                gridColNombre.Add(row.Cells[1].Value.ToString());
                gridColDescripcion.Add(row.Cells[5].Value.ToString());
                gridColConsola.Add(row.Cells[2].Value.ToString());
                if (!cmbConsola.Items.Contains(row.Cells[2].Value.ToString()))
                {
                    cmbConsola.Items.Add(row.Cells[2].Value.ToString());
                }
                gridColFabricante.Add(row.Cells[6].Value.ToString());
                if(!cmbFabricante.Items.Contains(row.Cells[6].Value.ToString()))
                {
                    cmbFabricante.Items.Add(row.Cells[6].Value.ToString());
                }
            }
            txtIDProducto.AutoCompleteCustomSource = gridColIDProducto;
            txtNombre.AutoCompleteCustomSource = gridColNombre;
            txtDescripcion.AutoCompleteCustomSource = gridColDescripcion;
            cmbConsola.AutoCompleteCustomSource = gridColConsola;
            cmbFabricante.AutoCompleteCustomSource = gridColFabricante;
        }


        private String ArreglarText(ref TextBox txtBuscador)
        {
            String consultaArreglada = new String('\0', 0);
            int cont = 0;

            foreach (Char c in txtBuscador.Text)
            {
                if (c == '\'')
                {
                    consultaArreglada += '_';
                }
                else
                {
                    consultaArreglada += c;
                }
                cont++;
            }

            //MessageBox.Show(consultaArreglada);
            return consultaArreglada;
        }


    }
}
